package com.bigintegerdemo;

import java.math.BigInteger;
import java.util.Random;

public class BigIntegerDemo1 {
    public static void main(String[] args) {
        /*
        public BigInteger(int num,Random rnd)      获取随机大整数，范围:[0 ~ 2的num次方-1]
        public BigInteger(String val)              获取指定的大整数
        public BigInteger(string val, int radix)   获取指定进制的大整数

        public static BigInteger valueOf(long val) 静态方法获取BigInteger的对象，内部有优化
        细节:
             对象一旦创建里面的数据不能发生改变。
         */
        //1.获取随机大整数
        Random random = new Random();
        BigInteger bigInteger = new BigInteger(6, random);
        System.out.println(bigInteger);

        //2.获取一个指定的大整数
        //细节:字符串中必须是整数，否则会报错
        BigInteger bigInteger1 = new BigInteger("999999999");
        System.out.println(bigInteger1);

        //3.获取指定进制的大整数
        /*
        细节:
        1.字符串中的数字必须是整数
        2.字符串中的数字必须要跟进制吻合。
         */
        BigInteger bigInteger2 = new BigInteger("110", 2);
        System.out.println(bigInteger2);

        //4.静态方法获取BigInteger的对象，内部有优化
        /*
        细节:
        1.能表示范围比较小，只能在long的取值范围之内，如果超出long的范围就不行了。
        2.在内部对常用的数字:-16 ~ 16进行了优化。
        提前把-16 ~ 16 先创建好BigInteger的对象，如果多次获取不会重新创建新的。
         */
        BigInteger bigInteger3 = BigInteger.valueOf(100);
        System.out.println(bigInteger3);

        //5.对象一旦创建里面的数据不能发生改变。
        BigInteger bigInteger4 = BigInteger.valueOf(1);
        BigInteger bigInteger5 = BigInteger.valueOf(2);
        BigInteger bigInteger6 = bigInteger4.add(bigInteger5);
        System.out.println(bigInteger6);
        //此时，不会修改参与计算的BigInteger对象中的值，而是产生了一个新的BigInteger对象记录3
    }
}
